package com.yfp.operation.service;

import com.yfp.operation.domain.PositionSharing;
import com.yfp.operation.domain.UserBill;
import com.yfp.operation.domain.dto.SubAccountDTO;
import com.yfp.operation.domain.vo.SharingVO;
import com.yfp.operation.domain.vo.SubAccountVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

/**
 * @Description: 用户分成账单
 * 
 * @CreateDate: 2024/5/28 14:21
 * @UpdateUser: 
 * @UpdateDate: 2024/5/28 14:21
 * @UpdateRemark: 暂无修改
 * @Version: 1.0
 */
public interface UserBillService {

    UserBill findById(Long id);

    /**
     * 订单分成
     *
     * @param orderSn 订单编号
     * @param payType 支付类型
     */
    void orderRouting(String orderSn,  Integer payType);

    /**
     * 订单退款扣除之前的分成
     *
     * @param orderSn
     * @param refundMoney
     */
    void orderReimburse(String orderSn, BigDecimal refundMoney);

    /**
     * 定时任务每天凌晨2点执行
     * 订单入账
     */
    void orderBillCarryto();

    /**
     * 获取当前登录用户的分成账单
     *
     * @return
     */
    List<UserBill> getAccountBill();

    /**
     * 设备分账列表（所有设备）
     * @param subAccountDTO
     * @return
     */
    List<SubAccountVO> subAccount(SubAccountDTO subAccountDTO);


    /**
     * 获取订单分账列表（所有设备）
     * @param subAccountDTO
     * @return
     */
    List<UserBill> selectAllUserBill(SubAccountDTO subAccountDTO);

    /**
     * 创客分账统计列表
     * @param userIds
     * @return
     */
    List<SharingVO> selectSharing(List<Integer> userIds);

    /**
     * 查询分账
     * @param orderSn
     * @param status
     * @return
     */
    List<UserBill> getByOrderSnAndStatusNot(String orderSn, Integer status);

    /**
     * 查询分账
     * @param orderSn
     * @param status
     * @return
     */
    List<UserBill> getByOrderSnAndStatus(String orderSn, Integer status);

    /**
     * 查询分账单
     * @param ids
     * @return
     */
    List<UserBill> getByIdsIn(List<Long> ids);

    /**
     * 设备分账列表（设备id模糊查询）
     * @param subAccountDTO
     * @return
     */
    List<SubAccountVO> getByMachineIdAccount(SubAccountDTO subAccountDTO);

    /**
     * 获取订单分账列表（设备id模糊查询）
     * @param subAccountDTO
     * @return
     */
    List<UserBill> selectByMachineIdUserBill(SubAccountDTO subAccountDTO);

    List<String> getMachineId(SubAccountDTO subAccountDTO);

    /**
     * 根据设备id获取订单分账列表
     * @param subAccountDTO
     * @return
     */
    List<UserBill> selectMachineSharing(SubAccountDTO subAccountDTO);

    List<PositionSharing> getSharing(Set<String> orderIds);

    // 获取用户id
    List<Integer> getUserId(String accountNumber);

    /**
     * 系统自动分账打款
     */
    void autoMakePayment();

    /**
     * 编辑
     * @param userBill
     */
    void edit(UserBill userBill);
}